31. 矩阵求逆

矩阵求逆

在使用卡尔曼滤波器方程的过程中,你还需要学习一种矩阵运算:逆矩阵。

特别是在计算卡尔曼滤波器增益矩阵 \mathbf{K} 时,你需要对 \mathbf{S} 矩阵进行求逆运算。上标符号 ^{-1} 表示逆矩阵。下面是卡尔曼滤波器增益方程的一个小提示,其中你可以看到 对 S 求逆的必要性。

\mathbf{S_{k}} = \mathbf{H_{k}} \mathbf{P_{k|k-1}} \mathbf{H_{k}^T} + \mathbf{R_{k}}

\mathbf{K_{k}} = \mathbf{P_{k|k-1}} \mathbf{H_{k}^T} \mathbf{S_{k}}^{-1}

逆矩阵的正式定义

如上所述,矩阵 \mathbf{A} 的逆矩阵可以表示为 \mathbf{A^{-1}}

形式上,如果矩阵 \mathbf{A} 有逆矩阵,那么

\mathbf{A} \times \mathbf{A^{-1}} = \mathbf{A^{-1}} \times \mathbf{A} = \mathbf{I}

其中 \mathbf{I} 是一个单位矩阵。

只有方矩阵,即行数等于列数的矩阵,才具有逆矩阵。你可以看到,根据逆矩阵和单位矩阵的定义,这肯定是正确的。单位矩阵始终为方矩阵,因此

如果 \mathbf{A} 大小为 m x n,那么 \mathbf{A^{-1}} 大小必须为 n x m 才能得到 m x m 的方标识矩阵。

\mathbf{A^{-1}} \mathbf{A} 相乘得出 (n x m)(n x m) = n x m,只有 n = m,它才是一个方矩阵。

矩阵要具备逆矩阵,必须为方矩阵。同时,并非所有方矩阵都有逆矩阵。

标量倒数和逆矩阵的关系

在标量数学中,数字 x 的倒数是 1/x

标量乘以一个标量的倒数,结果为 1:

x \times \frac{1}{x} = 1

在线性代数中,逆矩阵与标量倒数相似:

\mathbf{A} \times \mathbf{A^{-1}} = \mathbf{I}

在本课前一部分,你已经学过,标识矩阵的功能和数字 1 类似。

计算逆矩阵

在本堂课上,你需要学习计算 1x1 矩阵和 2x2 矩阵的逆矩阵。

矩阵越大, 计算越复杂 。Python 和 C ++ 都有能够计算矩阵的逆矩阵的库,例如 NumPy 库 Eigen 库

1 x 1 矩阵的逆矩阵

对于带有值为 a 的单个元素的 1 \times 1 矩阵,逆矩阵为 \frac{1}{a}

因此,

\begin{bmatrix}25\end{bmatrix} 的逆矩阵为

\begin{bmatrix}\frac{1}{25}\end{bmatrix}

2 x 2 矩阵的逆矩阵

假设有矩阵

\begin{bmatrix}a & b \\\ c & d\end{bmatrix}

这个 2 x 2 矩阵的逆矩阵为

\frac{1}{ad - bc}\begin{bmatrix}d & -b \\\ -c & a\end{bmatrix}

你可以看到,如果 ad = bc ,则该矩阵没有逆矩阵。

2x2 矩阵逆矩阵的另一个公式

下面是 2x2 矩阵逆矩阵的另一个更为正式的公式:

\mathbf{A}^{-1} = \frac{1}{\text{det }\mathbf{A}} \left[\left(\text{tr } \mathbf{A}\right) \mathbf{I} - \mathbf{A}\right]

其中

\text{det }\mathbf{A} 被称为矩阵的行列式。对于 2x2 矩阵,行列式为ad - bc。

\text{tr } \mathbf{A} 叫做矩阵轨迹。轨迹是跨主对角线的和,在本例中是 a + d。

如果把所有的元素相乘,最终会得出同样的方程,即:

\mathbf{A^{-1}} =\frac{1}{ad - bc}\begin{bmatrix}d & -b \\\ -c & a\end{bmatrix}

3 x 3 或更大矩阵的逆矩阵

计算更大矩阵的逆矩阵需要相对复杂的矩阵代数理论。在本课中,你只需要计算 2×2 矩阵的逆矩阵。

逆矩阵编程

你需要写一个函数来计算矩阵的逆矩阵。请记住,你需要检查矩阵的大小,因为 1x1 矩阵和 2x2 的公式不同。